package com.hcss.common.util.excel.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @Description: Excel文件工具类<br>
 * 这是位Excel文件操作方便，定义的一个文件工具类
 * @Author:momo
 * @Since:2018年12月21日
 * @Version:1.1.0
 */
public class ExcelFileUtil {
	
	/**
	 * 获得一个输出流对象
	 * @param file 文件
	 * @return 输出流对象
	 */
	public static BufferedOutputStream getOutputStream(File file){
		try {
			return new BufferedOutputStream(new FileOutputStream(touch(file)));
		} catch (Exception e) {
			System.err.println("获取输出流失败......");
			return null;
		}
	}
	
	/**
	 * 获得输入流
	 * 
	 * @param file 文件
	 * @return 输入流
	 */
	public static BufferedInputStream getInputStream(File file) throws IOException {
		return new BufferedInputStream(toStream(file));
	}
	
	/**
	 * 文件转为流
	 * 
	 */
	public static FileInputStream toStream(File file) {
		try {
			return new FileInputStream(file);
		} catch (FileNotFoundException e) {
			System.err.println("文件未找到......");
			return null;
		}
	}
	
	/**
	 * 创建文件及其父目录，如果这个文件存在，直接返回这个文件<br>
	 * @param filePath
	 * @return
	 */
	public static File touch(String filePath) {
		return touch(new File(filePath));
	}
	
	
	/**
	 * 创建文件及其父目录，如果这个文件存在，直接返回这个文件<br>
	 * @param file 文件对象
	 * @return 文件，若路径为null，返回null
	 */
	public static File touch(File file){
		if (null == file) {
			return null;
		}
		if (false == file.exists()) {
			mkParentDirs(file);
			try {
				file.createNewFile();
			} catch (Exception e) {
				System.err.println("文件创建出错......");
			}
		}
		return file;
	}
	
	/**
	 * 创建所给文件或目录的父目录
	 * 
	 * @param file 文件或目录
	 * @return 父目录
	 */
	public static File mkParentDirs(File file) {
		final File parentFile = file.getParentFile();
		if (null != parentFile && false == parentFile.exists()) {
			parentFile.mkdirs();
		}
		return parentFile;
	}
	
	/**
	 * 用户判断文件后缀
	 * @param str
	 * @param suffix
	 * @param isIgnoreCase
	 * @return
	 */
	public static boolean endWith(CharSequence str, CharSequence suffix, boolean isIgnoreCase) {
		if (null == str || null == suffix) {
			return null==str && null==suffix;
		}

		if (isIgnoreCase) {
			return str.toString().toLowerCase().endsWith(suffix.toString().toLowerCase());
		} else {
			return str.toString().endsWith(suffix.toString());
		}
	}

	/**
	 * 判断str是否为空
	 * @param str
	 * @return
	 */
	public static boolean strIsEmpty(String str) {
		return str == null || "".equals(str);
	}
}
